module decode_mulh(
//h阵数值
i_h_0,
i_h_1,
i_h_2,
i_h_3,
i_h_4,
i_h_5,
i_h_6,
i_h_7,
//v2c数据
i_v2c_0,
i_v2c_1,
i_v2c_2,
i_v2c_3,
i_v2c_4,
i_v2c_5,
i_v2c_6,
i_v2c_7,
//v2ch数据
o_v2ch
);

//h阵数值
input  [15:0] i_h_0;
input  [15:0] i_h_1;
input  [15:0] i_h_2;
input  [15:0] i_h_3;
input  [15:0] i_h_4;
input  [15:0] i_h_5;
input  [15:0] i_h_6;
input  [15:0] i_h_7;
//v2c数据
input  [15:0] i_v2c_0;
input  [15:0] i_v2c_1;
input  [15:0] i_v2c_2;
input  [15:0] i_v2c_3;
input  [15:0] i_v2c_4;
input  [15:0] i_v2c_5;
input  [15:0] i_v2c_6;
input  [15:0] i_v2c_7;
//v2ch数据
output [127:0] o_v2ch;

wire [15:0] v2ch_0;
wire [15:0] v2ch_1;
wire [15:0] v2ch_2;
wire [15:0] v2ch_3;
wire [15:0] v2ch_4;
wire [15:0] v2ch_5;
wire [15:0] v2ch_6;
wire [15:0] v2ch_7;

//乘法表
function [3:0] mul;
input [3:0] h;
input [3:0] di;
    case(h)
    4'd1  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd1;
        4'd2  : mul = 4'd2;
        4'd3  : mul = 4'd3;
        4'd4  : mul = 4'd4;
        4'd5  : mul = 4'd5;
        4'd6  : mul = 4'd6;
        4'd7  : mul = 4'd7;
        4'd8  : mul = 4'd8;
        4'd9  : mul = 4'd9;
        4'd10 : mul = 4'd10;
        4'd11 : mul = 4'd11;
        4'd12 : mul = 4'd12;
        4'd13 : mul = 4'd13;
        4'd14 : mul = 4'd14;
        4'd15 : mul = 4'd15;
        endcase
    end
    4'd2  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd2;
        4'd2  : mul = 4'd4;
        4'd3  : mul = 4'd6;
        4'd4  : mul = 4'd8;
        4'd5  : mul = 4'd10;
        4'd6  : mul = 4'd12;
        4'd7  : mul = 4'd14;
        4'd8  : mul = 4'd3;
        4'd9  : mul = 4'd1;
        4'd10 : mul = 4'd7;
        4'd11 : mul = 4'd5;
        4'd12 : mul = 4'd11;
        4'd13 : mul = 4'd9;
        4'd14 : mul = 4'd15;
        4'd15 : mul = 4'd13;
        endcase
    end
    4'd3  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd3;
        4'd2  : mul = 4'd6;
        4'd3  : mul = 4'd5;
        4'd4  : mul = 4'd12;
        4'd5  : mul = 4'd15;
        4'd6  : mul = 4'd10;
        4'd7  : mul = 4'd9;
        4'd8  : mul = 4'd11;
        4'd9  : mul = 4'd8;
        4'd10 : mul = 4'd13;
        4'd11 : mul = 4'd14;
        4'd12 : mul = 4'd7;
        4'd13 : mul = 4'd4;
        4'd14 : mul = 4'd1;
        4'd15 : mul = 4'd2;
        endcase
    end
    4'd4  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd4;
        4'd2  : mul = 4'd8;
        4'd3  : mul = 4'd12;
        4'd4  : mul = 4'd3;
        4'd5  : mul = 4'd7;
        4'd6  : mul = 4'd11;
        4'd7  : mul = 4'd15;
        4'd8  : mul = 4'd6;
        4'd9  : mul = 4'd2;
        4'd10 : mul = 4'd14;
        4'd11 : mul = 4'd10;
        4'd12 : mul = 4'd5;
        4'd13 : mul = 4'd1;
        4'd14 : mul = 4'd13;
        4'd15 : mul = 4'd9;
        endcase
    end
    4'd5  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd5;
        4'd2  : mul = 4'd10;
        4'd3  : mul = 4'd15;
        4'd4  : mul = 4'd7;
        4'd5  : mul = 4'd2;
        4'd6  : mul = 4'd13;
        4'd7  : mul = 4'd8;
        4'd8  : mul = 4'd14;
        4'd9  : mul = 4'd11;
        4'd10 : mul = 4'd4;
        4'd11 : mul = 4'd1;
        4'd12 : mul = 4'd9;
        4'd13 : mul = 4'd12;
        4'd14 : mul = 4'd3;
        4'd15 : mul = 4'd6;
        endcase
    end
    4'd6  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd6;
        4'd2  : mul = 4'd12;
        4'd3  : mul = 4'd10;
        4'd4  : mul = 4'd11;
        4'd5  : mul = 4'd13;
        4'd6  : mul = 4'd7;
        4'd7  : mul = 4'd1;
        4'd8  : mul = 4'd5;
        4'd9  : mul = 4'd3;
        4'd10 : mul = 4'd9;
        4'd11 : mul = 4'd15;
        4'd12 : mul = 4'd14;
        4'd13 : mul = 4'd8;
        4'd14 : mul = 4'd2;
        4'd15 : mul = 4'd4;
        endcase
    end
    4'd7  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd7;
        4'd2  : mul = 4'd14;
        4'd3  : mul = 4'd9;
        4'd4  : mul = 4'd15;
        4'd5  : mul = 4'd8;
        4'd6  : mul = 4'd1;
        4'd7  : mul = 4'd6;
        4'd8  : mul = 4'd13;
        4'd9  : mul = 4'd10;
        4'd10 : mul = 4'd3;
        4'd11 : mul = 4'd4;
        4'd12 : mul = 4'd2;
        4'd13 : mul = 4'd5;
        4'd14 : mul = 4'd12;
        4'd15 : mul = 4'd11;
        endcase
    end
    4'd8  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd8;
        4'd2  : mul = 4'd3;
        4'd3  : mul = 4'd11;
        4'd4  : mul = 4'd6;
        4'd5  : mul = 4'd14;
        4'd6  : mul = 4'd5;
        4'd7  : mul = 4'd13;
        4'd8  : mul = 4'd12;
        4'd9  : mul = 4'd4;
        4'd10 : mul = 4'd15;
        4'd11 : mul = 4'd7;
        4'd12 : mul = 4'd10;
        4'd13 : mul = 4'd2;
        4'd14 : mul = 4'd9;
        4'd15 : mul = 4'd1;
        endcase
    end
    4'd9  : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd9;
        4'd2  : mul = 4'd1;
        4'd3  : mul = 4'd8;
        4'd4  : mul = 4'd2;
        4'd5  : mul = 4'd11;
        4'd6  : mul = 4'd3;
        4'd7  : mul = 4'd10;
        4'd8  : mul = 4'd4;
        4'd9  : mul = 4'd13;
        4'd10 : mul = 4'd5;
        4'd11 : mul = 4'd12;
        4'd12 : mul = 4'd6;
        4'd13 : mul = 4'd15;
        4'd14 : mul = 4'd7;
        4'd15 : mul = 4'd14;
        endcase
    end
    4'd10 : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd10;
        4'd2  : mul = 4'd7;
        4'd3  : mul = 4'd13;
        4'd4  : mul = 4'd14;
        4'd5  : mul = 4'd4;
        4'd6  : mul = 4'd9;
        4'd7  : mul = 4'd3;
        4'd8  : mul = 4'd15;
        4'd9  : mul = 4'd5;
        4'd10 : mul = 4'd8;
        4'd11 : mul = 4'd2;
        4'd12 : mul = 4'd1;
        4'd13 : mul = 4'd11;
        4'd14 : mul = 4'd6;
        4'd15 : mul = 4'd12;
        endcase
    end
    4'd11 : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd11;
        4'd2  : mul = 4'd5;
        4'd3  : mul = 4'd14;
        4'd4  : mul = 4'd10;
        4'd5  : mul = 4'd1;
        4'd6  : mul = 4'd15;
        4'd7  : mul = 4'd4;
        4'd8  : mul = 4'd7;
        4'd9  : mul = 4'd12;
        4'd10 : mul = 4'd2;
        4'd11 : mul = 4'd9;
        4'd12 : mul = 4'd13;
        4'd13 : mul = 4'd6;
        4'd14 : mul = 4'd8;
        4'd15 : mul = 4'd3;
        endcase
    end
    4'd12 : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd12;
        4'd2  : mul = 4'd11;
        4'd3  : mul = 4'd7;
        4'd4  : mul = 4'd5;
        4'd5  : mul = 4'd9;
        4'd6  : mul = 4'd14;
        4'd7  : mul = 4'd2;
        4'd8  : mul = 4'd10;
        4'd9  : mul = 4'd6;
        4'd10 : mul = 4'd1;
        4'd11 : mul = 4'd13;
        4'd12 : mul = 4'd15;
        4'd13 : mul = 4'd3;
        4'd14 : mul = 4'd4;
        4'd15 : mul = 4'd8;
        endcase
    end
    4'd13 : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd13;
        4'd2  : mul = 4'd9;
        4'd3  : mul = 4'd4;
        4'd4  : mul = 4'd1;
        4'd5  : mul = 4'd12;
        4'd6  : mul = 4'd8;
        4'd7  : mul = 4'd5;
        4'd8  : mul = 4'd2;
        4'd9  : mul = 4'd15;
        4'd10 : mul = 4'd11;
        4'd11 : mul = 4'd6;
        4'd12 : mul = 4'd3;
        4'd13 : mul = 4'd14;
        4'd14 : mul = 4'd10;
        4'd15 : mul = 4'd7;
        endcase
    end
    4'd14 : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd14;
        4'd2  : mul = 4'd15;
        4'd3  : mul = 4'd1;
        4'd4  : mul = 4'd13;
        4'd5  : mul = 4'd3;
        4'd6  : mul = 4'd2;
        4'd7  : mul = 4'd12;
        4'd8  : mul = 4'd9;
        4'd9  : mul = 4'd7;
        4'd10 : mul = 4'd6;
        4'd11 : mul = 4'd8;
        4'd12 : mul = 4'd4;
        4'd13 : mul = 4'd10;
        4'd14 : mul = 4'd11;
        4'd15 : mul = 4'd5;
        endcase
    end
    4'd15 : begin
        case(di)
        4'd0  : mul = 4'd0;
        4'd1  : mul = 4'd15;
        4'd2  : mul = 4'd13;
        4'd3  : mul = 4'd2;
        4'd4  : mul = 4'd9;
        4'd5  : mul = 4'd6;
        4'd6  : mul = 4'd4;
        4'd7  : mul = 4'd11;
        4'd8  : mul = 4'd1;
        4'd9  : mul = 4'd14;
        4'd10 : mul = 4'd12;
        4'd11 : mul = 4'd3;
        4'd12 : mul = 4'd8;
        4'd13 : mul = 4'd7;
        4'd14 : mul = 4'd5;
        4'd15 : mul = 4'd10;
        endcase
    end
    endcase
endfunction

assign v2ch_0 = {mul(i_h_0[15:12],i_v2c_0[15:12]),mul(i_h_0[11:8],i_v2c_0[11:8]),mul(i_h_0[7:4],i_v2c_0[7:4]),mul(i_h_0[3:0],i_v2c_0[3:0])};
assign v2ch_1 = {mul(i_h_1[15:12],i_v2c_1[15:12]),mul(i_h_1[11:8],i_v2c_1[11:8]),mul(i_h_1[7:4],i_v2c_1[7:4]),mul(i_h_1[3:0],i_v2c_1[3:0])};
assign v2ch_2 = {mul(i_h_2[15:12],i_v2c_2[15:12]),mul(i_h_2[11:8],i_v2c_2[11:8]),mul(i_h_2[7:4],i_v2c_2[7:4]),mul(i_h_2[3:0],i_v2c_2[3:0])};
assign v2ch_3 = {mul(i_h_3[15:12],i_v2c_3[15:12]),mul(i_h_3[11:8],i_v2c_3[11:8]),mul(i_h_3[7:4],i_v2c_3[7:4]),mul(i_h_3[3:0],i_v2c_3[3:0])};
assign v2ch_4 = {mul(i_h_4[15:12],i_v2c_4[15:12]),mul(i_h_4[11:8],i_v2c_4[11:8]),mul(i_h_4[7:4],i_v2c_4[7:4]),mul(i_h_4[3:0],i_v2c_4[3:0])};
assign v2ch_5 = {mul(i_h_5[15:12],i_v2c_5[15:12]),mul(i_h_5[11:8],i_v2c_5[11:8]),mul(i_h_5[7:4],i_v2c_5[7:4]),mul(i_h_5[3:0],i_v2c_5[3:0])};
assign v2ch_6 = {mul(i_h_6[15:12],i_v2c_6[15:12]),mul(i_h_6[11:8],i_v2c_6[11:8]),mul(i_h_6[7:4],i_v2c_6[7:4]),mul(i_h_6[3:0],i_v2c_6[3:0])};
assign v2ch_7 = {mul(i_h_7[15:12],i_v2c_7[15:12]),mul(i_h_7[11:8],i_v2c_7[11:8]),mul(i_h_7[7:4],i_v2c_7[7:4]),mul(i_h_7[3:0],i_v2c_7[3:0])};

assign o_v2ch = {v2ch_0,v2ch_1,v2ch_2,v2ch_3,v2ch_4,v2ch_5,v2ch_6,v2ch_7};

endmodule
